package bishiqiangxun;
import java.util.*;
public class Test2 {
    //笔试强训day39第二题 ： 字符编码
    //利用小根堆  + 构建最优二叉树
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            int count =  charHafuman(str);
            System.out.println(count);
        }


    }

    private static int charHafuman(String str) {

        Map<Character, Integer> hashmap = new HashMap<>();
        for(char ch : str.toCharArray()) {
            hashmap.put(ch,hashmap.getOrDefault(ch,0) + 1);
        }
        //还要一个小根堆
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for(int val : hashmap.values()) {
            queue.add(val);
        }

        int ret = 0;
        //每次就是把堆里面的两个元素拿出来  堆顶的   合成根节点  构造最优二叉树
        while(queue.size() >= 2) {
            int val1 = queue.poll();
            int val2 = queue.poll();
            queue.add(val1 + val2);
            ret += val1 + val2;
        }

        return ret;
    }
}
